/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package common;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.List;
import tree.AvlNode;
import tree.AvlTree;

/**
 *
 * @author leonardo
 */
public class Tradutor {
	
	private AvlTree dicionario = new AvlTree();
	
	public Tradutor(String path)
	{
		carregaDicionario( path );
	}

	/*
	 * Carrega os dados do arquivo
	 * @author leonardo/cassio
	 */
	protected void carregaDicionario(String arq)
	{
		try{
			FileReader fr = new FileReader(arq);
			BufferedReader in = new BufferedReader(fr);
			String line = in.readLine();

			// Percorre as linhas do arquivo
			while (line != null) {

				// Instancia um dicionário que receberá os dados da tradução
				Dicionario traducao = new Dicionario();

				// Quebra a string em um array pelo limitador
				String palavras[] = line.split("#");
				
				// Caso o array não possua ao menos uma tradução
				if (palavras.length <= 1) throw new Exception("Arquivo inválido");
				
				// Define indíce da arvore
				traducao.setPalavra(palavras[0]);
				
				// Percorre o array preenchendo as traduções da palavra
				for(int i = 1; i < palavras.length; i++) {
					traducao.addTraducao(palavras[i]);
				}

				// Adiciona na arvore
				dicionario.insert(traducao);
				
				line = in.readLine();
			}

			//System.out.println();
		}catch(Exception e){
			System.out.println("Erro " + e);
		}
	}
	
	/*
	 * Procura na arvore a palavra desejada
	 * @author leonardo/cassio
	 */
	public List traduzPalavra(String palavra)
	{
		// Procura folha com a tradução
		AvlNode traducao = dicionario.search(palavra);
		
		// Se encontrar, retorna as definições senão null
		if (traducao != null)
			return traducao.getKey().getDefinicoes();
		else
			return null;
	}

	/*
	 * Insere a tradução na arvore
	 * @author leonardo/cassio
	 */
	public void insereTraducao(String palavra, List<String> definicoes)
	{
		// Prepara novo dicionario
		Dicionario dic = new Dicionario(palavra, definicoes);
		
		// Insere na arvore
		dicionario.insert(dic);
	}

	/*
	 * Salva arvore em arquivo
	 * @author leonardo/cassio
	 */
	public void salvaDicionario(String arq)
	{
		try{
			FileWriter fw = new FileWriter(arq);
			PrintWriter out = new PrintWriter(fw);
			
			// Percorre a árvore montando arquivo para impressão
			String dados = dicionario.getCaminho();
			
			// Imprime os dados da árvore no arquivo
			out.print( dados );
			out.close();
		}catch(Exception e){
			System.out.println("Erro " + e);
		}
	}
}
